import service from '../require/request';
import axios from 'axios';

/**
 * 导出选项接口
 */
export interface ExportOption {
    /**
     * 导出ID
     */
    export_id: string;

    /**
     * 导出描述
     */
    export_desc: string;
}

/**
 * 导出选项列表响应接口
 */
export interface ExportOptionsResponse {
    /**
     * 导出选项列表
     */
    data: ExportOption[];
}

/**
 * 导出请求参数接口
 */
export interface ExportRequestParams {
    /**
     * 导出ID
     */
    export_id: string;

    /**
     * 导出描述
     */
    export_desc: string;
}

/**
 * 获取导出选项列表
 * @returns Promise<ExportOption[]> 导出选项列表
 */
export const getExportOptions = async (): Promise<ExportOption[]> => {
    try {
        // 发送请求并等待响应
        // 拦截器会自动从 { code, msg, data } 中提取 data 部分
        const apiData = await service.post<ExportOptionsResponse, ExportOption[]>(
            '/b/sme/cdc/career/export_mgt/options/search',
            {}
        );

        return apiData;
    } catch (error) {
        console.error('获取导出选项列表失败:', error);
        throw error;
    }
};

/**
 * 导出文件
 * @param params 导出请求参数
 * @returns Promise<void>
 */
export const exportFile = async (params: ExportRequestParams): Promise<void> => {
    try {
        // 获取token
        const token = localStorage.getItem('token') || '';

        // 发送请求并等待响应
        const response = await axios({
            method: 'post',
            url: '/b/sme/cdc/career/export_mgt/export/search',
            data: params,
            responseType: 'blob',
            headers: {
                'Content-Type': 'application/json;charset=utf-8',
                Authorization: token ? `Bearer ${token}` : ''
            }
        });

        // 获取文件名
        let filename = `${params.export_desc}.xlsx`;
        const contentDisposition = response.headers['content-disposition'];
        if (contentDisposition) {
            const filenameMatch = contentDisposition.match(/filename[^;=\n]*=((['"]).*)\2|[^;\n]*/);
            if (filenameMatch && filenameMatch[1]) {
                filename = filenameMatch[1].replace(/['"]*/g, '');
            }
        }

        // 获取内容类型
        const contentType = response.headers['content-type'] || 'application/octet-stream';

        // 创建 Blob URL
        const blob = new Blob([response.data], { type: contentType });
        const url = window.URL.createObjectURL(blob);

        // 创建一个隐藏的a标签触发下载
        const a = document.createElement('a');
        a.style.display = 'none';
        a.href = url;
        a.download = filename;

        // 添加到body并触发点击
        document.body.appendChild(a);
        a.click();

        // 清理
        window.URL.revokeObjectURL(url);
        document.body.removeChild(a);

        console.log('文件导出成功:', filename);
    } catch (error) {
        console.error('导出文件失败:', error);
        throw error;
    }
};
